package view.controller;

import interfaz.TDAManejoDatos;

import java.io.File;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.swing.JOptionPane;

import beans.BeanCliente;
import beans.BeanCotizacionRodamiento;
import beans.BeanMarca;
import beans.BeanProveedor;
import beans.BeanRodamiento;
import beans.BeanSolicitudCotizacion;
import beans.BeanUsuario;

public class ControllerPrincipal {
	private static ControllerPrincipal instancia;
	private static String hostname = "localhost";
	TDAManejoDatos rmiController;

	public static void main(String[] args)
	{//
		new ControllerPrincipal();
	}

	public static ControllerPrincipal getInstancia(){
		if (instancia==null){
			instancia = new ControllerPrincipal();
		}
		return instancia;
	}

	public ControllerPrincipal(){
		instancia = this;
		getStub();
		//		if(getStub()){
		//			Menu menu = new Menu();
		//			menu.setVisible(true);
		//		}
	}

	private boolean getStub() {
		try {
			rmiController = (TDAManejoDatos)Naming.lookup ("//"+hostname+"/rmiController");
			System.out.println("GetStub");
			return true;
		} catch (Exception e) {
			//e.printStackTrace();
			System.out.println("No me puedo conectar al server");
			JOptionPane.showMessageDialog(null, "Error no me puedo conectar al server \n "+"//"+hostname+"/rmiController");
		}
		return false;
	}

	public boolean altaCliente(BeanCliente dtoCliente){
		try {
			return rmiController.setCliente(dtoCliente);

		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return false;		

	}
	
	public boolean modificarCliente(BeanCliente beanCliente){
		try {
			return rmiController.updateCliente(beanCliente);

		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return false;		

	}


	public boolean altaRodamiento(BeanRodamiento beanRodamiento){
		try {
			return rmiController.setRodamiento(beanRodamiento);

		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return false;		

	}

	public Map<Integer,List<String>> getRodamientosByCriterio(BeanRodamiento beanRodamiento){
		try{
			return rmiController.getRodamientosByCriterio(beanRodamiento);
		}catch (RemoteException e){
			e.printStackTrace();
		}
		return null;
	}


	public boolean bajaRodamiento (BeanRodamiento beanRodamiento){
		try{
			return rmiController.deleteRodamiento(beanRodamiento);
		}catch (RemoteException e){
			e.printStackTrace();
		}
		return false;
	}

	public boolean modificarRodamiento (BeanRodamiento beanRodamientoNuevo){
		try{
			return rmiController.updateRodamiento(beanRodamientoNuevo);
		}catch (RemoteException e){
			e.printStackTrace();
		}
		return false;
	}

	public List<BeanMarca> cargarComboMarcas(){
		try {
			return rmiController.getListaMarcas();

		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return new ArrayList<BeanMarca>();	
	}
	
	public BeanUsuario loguearUsuario (BeanUsuario beanUsuario){
		try{
			return rmiController.loguearUsuario(beanUsuario);
		}catch (RemoteException e){
			e.printStackTrace();
		}
		return null;
	}
	
	
	public boolean cargarListaPrecos(BeanProveedor beanProveedor, File file){
		try{
			return rmiController.cargarListaPrecos(beanProveedor, file);
		}catch (RemoteException e){
			e.printStackTrace();
		}
		return false;
	}
	
	public BeanCliente buscarClientes(String nombreCliente, String cuitCliente) {
		BeanCliente beanCliente = new BeanCliente();
		try{
			List<BeanCliente> listaBeanCliente = rmiController.buscarClientesCriterios(nombreCliente,cuitCliente);
			if(!listaBeanCliente.isEmpty())
				beanCliente = listaBeanCliente.get(0);
		}catch (RemoteException e){
			e.printStackTrace();
		}
		return beanCliente;
	}
	
	public boolean borrarCliente (BeanCliente beanCliente){
		try{
			return rmiController.deleteCliente(beanCliente);
		}catch (RemoteException e){
			e.printStackTrace();
		}
		return false;
	}
	
	public boolean borrarProveedor (BeanProveedor beanProveedor){
		try{
			return rmiController.deleteProveedor(beanProveedor);
		}catch (RemoteException e){
			e.printStackTrace();
		}
		return false;
	}
	
	public boolean modificarProveedor(BeanProveedor beanProveedor){
		try {
			return rmiController.updateProveedor(beanProveedor);

		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return false;		

	}

	public boolean altaProveedor(BeanProveedor beanProveedor) {
		try {
			return rmiController.setProveedor(beanProveedor);
		} catch (RemoteException e) {
			e.printStackTrace();
			return false;
		}
	}

	public BeanProveedor buscarProveedor(String cuit) {
		try{
			return rmiController.buscarProveedor(cuit);
		}catch (RemoteException e){
			e.printStackTrace();
			return null;
		}
	}
	
}
	
	